/*
 * modify_structs.h
 *
 * Dit bestand bevat de functie-definities waarmee het mogelijk is
 * om bencoded structuren te manipuleren.
 */

#ifndef MODIFY_STRUCTS_H_
#define MODIFY_STRUCTS_H_

#include "structs.h"

/*
 * Maak een string_t van een C-string.
 * Geeft een pointer naar de nieuwe waarde.
 */
extern entry_ptr string_create(const char *value);

/*
 * Maak een integer_t van een waarde.
 * Geeft een pointer naar de nieuwe waarde.
 */
extern entry_ptr integer_create(int value);

/*
 * Maak een mapping aan.
 * Geeft een pointer naar de nieuwe mapping.
 */
extern entry_ptr dictionary_create();

/*
 * Maak een lijst aan.
 * Geeft een pointer naar de nieuwe lijst.
 */
extern entry_ptr list_create();

/*
 * Voeg een element toe aan een mapping.
 * Geeft de mapping terug.
 */
extern entry_ptr dictionary_add(entry_ptr dictionary, const char *key, const entry_ptr value);

/*
 * Voeg een element toe aan een lijst.
 * Geeft de lijst terug.
 */
extern entry_ptr list_add(entry_ptr list, const entry_ptr value);

/*
 * Zoek een element met de naam name in een mapping.
 * Geeft een pointer naar het element terug als het gevonden is, anders NULL.
 */
extern entry_ptr dictionary_find(entry_ptr dict, const string_t name);

/*
 * Verwijder een element en alle subelementen uit het geheugen.
 * NB: Niet geheel geïmplementeerd!
 *
 * Geeft NULL terug als het verwijderen gelukt is, anders de pointer naar het element.
 */
extern entry_ptr entry_destroy(entry_ptr entry);


#endif /* MODIFY_STRUCTS_H_ */
